#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Módulos 
import sys, gtk, pygame, utils, objetos
from pygame.locals import *

# Constantes

# Clases
# ---------------------------------------------------------------------
        
class Linea:
	def __init__(self,texto,posx,posy):
		self.text,self.rect = utils.textotls(texto, posx,posy,14)

class Basura(pygame.sprite.Sprite):
	def __init__(self,posx,posy,url,valor):
		self.image = utils.load_image(url,True)
		self.rect = self.image.get_rect()
		self.rect.centerx = posx
		self.rect.centery = posy
		self.x_ini = posx
		self.y_ini = posy
		self.valor = valor
		self.drag = False
		self.correcta = False 
		self.sonido_correcto = pygame.mixer.Sound("sounds/click.wav")
		self.sonido_fallo = pygame.mixer.Sound("sounds/fallo.wav")
   
# Clase del lugar donde debe ser colocada la letra de la palabra a ordenar
class Match:
	def __init__(self,posx,posy,valor):
		self.image = utils.load_image('images/c3_3_hospitalarios.png')
		self.rect = self.image.get_rect()		
		self.rect.centerx = posx
		self.rect.centery = posy
		self.valor = valor
		self.posx = posx
		self.posy = posy
		self.ocupado = False
# ---------------------------------------------------------------------
# identifica si una letra esta siendo arrastrada
def detectar_arrastre(basuras):
	x,y = pygame.mouse.get_pos()
	for item in basuras:
		if(item.rect.collidepoint(pygame.mouse.get_pos()) and item.correcta == False):
			item.drag = True
# controla en donde se ha soltado la letra para saber si esta en el lugar correcto			
def soltar(basuras, basuras_match):
	for basura in basuras:
		if basura.drag == True:
			basura.drag = False
			#print("Suelta letra")
			for match in basuras_match:
				# si esta en el lugar correcto fija la letra en cuestion en esa posicion
				if basura.valor == match.valor and abs(basura.rect.centerx - match.posx) < 30 and abs(basura.rect.centery - match.posy) < 30 and match.ocupado == False:
					basura.rect.centerx = match.posx
					basura.rect.centery = match.posy
					basura.correcta = True
					#print("iguales "+letra.valor+"-"+match.valor)
					match.ocupado = True
					basura.sonido_correcto.play()
					break
			# si no se encuentra en el lugar correcto entonces la letra vuelve a la posicion original		
			if(basura.correcta == False):
					basura.rect.centerx = basura.x_ini
					basura.rect.centery = basura.y_ini
					basura.sonido_fallo.play()
					#print("vuelve a la posicion original")

#mueve las letras si estan siendo arrastradas por el mouse
def actualizar_basuras(basuras):
	for item in basuras:
		if(item.drag == True):
			item.rect.centerx,item.rect.centery = pygame.mouse.get_pos()

# verifica si las palabras estan ordenadas			
def ejercicios_completos(basuras):
	for item in basuras:
		if item.correcta == False:
			return False				
	#print("Palabra ordenada")
	return True	


# ---------------------------------------------------------------------
def dibujar(screen,cursor_picture, clock):
    salir = 0
    background_image = utils.load_image('images/fondo_3.png',True)
    i= 0
    j= 0
    numero_linea = 1
    btn_adelante = objetos.BotonAdelante()
    btn_atras = objetos.BotonAtras()
    
    
    clase, clase_rect = utils.texto_clase("Clase 3", 740*utils.RES, 30*utils.RES)
           
    titulo, titulo_rect = utils.texto_subtitulo("¿QUÉ SON LOS DESECHOS SÓLIDOS?", 240*utils.RES, 70*utils.RES,(50,255,50))
    titulo2, titulo2_rect = utils.texto_subtitulo_azul("¡A CLASIFICAR", 110*utils.RES, 130*utils.RES,(50,50,255))
    titulo3, titulo3_rect = utils.texto_subtitulo_azul("DESECHOS!", 110*utils.RES, 160*utils.RES,(50,50,255))
    linea1,linea1_rect = utils.textotls('Todas las actividades humanas generan algún tipo de', 595*utils.RES,55*utils.RES,14,(255,255,255))
    linea2,linea2_rect = utils.textotls('desecho. Los DESECHOS SÓLIDOS se llaman comunmen-', 602*utils.RES,70*utils.RES,14,(255,255,255))
    linea3,linea3_rect = utils.textotls('te basura y pueden clasificarse según su origen.', 580*utils.RES,85*utils.RES,14,(255,255,255))
     
    fondo = utils.load_image('images/c3_3_fondo.jpg')
    
    basuras = (Basura(240*utils.RES,420*utils.RES,'images/c3_3_hospitalarios.png',1),Basura(370*utils.RES,420*utils.RES,'images/c3_3_comerciales.png',2),Basura(500*utils.RES,420*utils.RES,'images/c3_3_industriales.png',3),Basura(630*utils.RES,420*utils.RES,'images/c3_3_domiciliarios.png',4))
    basuras_match = (Match(250*utils.RES,160*utils.RES,1),Match(395*utils.RES,160*utils.RES,2),Match(530*utils.RES,160*utils.RES,3),Match(680*utils.RES,160*utils.RES,4))
    
    bloque1 = ( Linea('Son los que se generan en los', 230*utils.RES,365*utils.RES),
    Linea('hospitales, sanatorios, laboratorios', 230*utils.RES,380*utils.RES),
    Linea('clínicos y otros centros de', 230*utils.RES,395*utils.RES),
    Linea('tratamiento médico.', 230*utils.RES,410*utils.RES))    
    
    
    bloque2 = ( Linea('Son los que', 400*utils.RES,365*utils.RES),
    Linea('se generan', 400*utils.RES,380*utils.RES),
    Linea('en los comercios.', 400*utils.RES,395*utils.RES))
    
    
    bloque3 = ( Linea('Son los que', 540*utils.RES,365*utils.RES),
    Linea('se generan', 540*utils.RES,380*utils.RES),
    Linea('en las industrias.', 540*utils.RES,395*utils.RES))
    
    
    bloque4 = ( Linea('Son los que', 690*utils.RES,365*utils.RES),
    Linea('se generan', 690*utils.RES,380*utils.RES),
    Linea('en los domicilios', 690*utils.RES,395*utils.RES),
    Linea('particulares', 690*utils.RES,410*utils.RES))
    
    
    while salir == 0:
    
    	# Pump GTK messages.sub
		while gtk.events_pending():
			gtk.main_iteration()
			
		for eventos in pygame.event.get():
			if eventos.type == QUIT:
				sys.exit(0)
			elif eventos.type == pygame.VIDEORESIZE:
			   pygame.display.set_mode(eventos.size, pygame.RESIZABLE)	
			elif eventos.type == MOUSEBUTTONDOWN:
				if btn_adelante.rect.collidepoint(pygame.mouse.get_pos()):
					salir = 4
					btn_adelante.sonido.play()	
				elif btn_atras.rect.collidepoint(pygame.mouse.get_pos()):
					salir = 2					
					btn_atras.sonido.play()	
				detectar_arrastre(basuras)	
			elif eventos.type == MOUSEBUTTONUP:
				soltar(basuras,basuras_match)
		
		
		actualizar_basuras(basuras)		
		# Realiza la animacion del texto
		
		completo = ejercicios_completos(basuras)				
			

		# Realiza la animacion del texto
		
		pygame.draw.rect(screen,(255,255,255),(700*utils.RES,25*utils.RES,100*utils.RES,70*utils.RES))
		screen.blit(fondo, (28*utils.RES, 38*utils.RES))
		screen.blit(background_image, (0, 0))
		screen.blit(clase, clase_rect)
		screen.blit(titulo, titulo_rect)
		screen.blit(titulo2, titulo2_rect)
		screen.blit(titulo3, titulo3_rect)
		screen.blit(linea1,linea1_rect)
		screen.blit(linea2,linea2_rect)
		screen.blit(linea3,linea3_rect)
		for basura in basuras:
			screen.blit(basura.image,basura.rect)
		#for basura in basuras_match:
		#	screen.blit(basura.image,basura.rect)	
		if basuras[0].correcta:			
			for texto in bloque1:
				screen.blit(texto.text,texto.rect)		
		if basuras[1].correcta:		
			for texto in bloque2:
				screen.blit(texto.text,texto.rect)		
		if basuras[2].correcta:		
			for texto in bloque3:
				screen.blit(texto.text,texto.rect)		
		if basuras[3].correcta:		
			for texto in bloque4:
				screen.blit(texto.text,texto.rect)				
			
		screen.blit(btn_adelante.image, btn_adelante.rect)
		screen.blit(btn_atras.image, btn_atras.rect)
		screen.blit(cursor_picture, pygame.mouse.get_pos())
		pygame.display.flip()

		# Try to stay at 30 FPS
		clock.tick(30)
                	 
    return salir

# This function is called when the game is run directly from the command line:
# ./TestGame.py 
def main():
	
	pygame.init()
	screen = pygame.display.set_mode((int(800*utils.RES), int(520*utils.RES)), pygame.RESIZABLE) #pygame.display.get_surface() #

	# Fake a Sugar cursor for the pyGame canvas area
	pygame.mouse.set_cursor((8,8),(0,0),(0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0))
	cursor_picture = pygame.image.load('images/standardcursor.png')
	cursor_picture.convert_alpha() 
	clock = pygame.time.Clock()
	dibujar(screen,cursor_picture,clock)

if __name__ == '__main__':
   main()
